# -*- encoding:utf-8 -*-
# flask对象app初始化放在这里
from flask import Flask
from flask_login import LoginManager
from app.models.book import db
from flask_mail import Mail
from flask_migrate import Migrate
from flask_cors import CORS


login_manager = LoginManager()
mail = Mail()


def create_app():
    # __name__就是app为起始根目录
    # 模版：app = Flask(__name__, template_folder="web/study_templates")
    # 静态文件：如果加了static_url_path=""（指定路径），那么static_folder="view_models/study_static"就不生效了
    app = Flask(__name__)
    # app.config.from_object("config")  # 把config配置文件移动到app文件夹里面并且修改名称为：secure
    app.config.from_object("app.secure")
    app.config.from_object("app.setting")
    CORS(app, resources=r'/*')
    register_blueprint(app)

    # 数据库对象 注册到flask框架的核心对象
    db.init_app(app)

    # 迁移文件
    # migrate = Migrate(app, db)
    Migrate(app, db)
    # flask db init # 只需要执行一次, 在项目的根目录执行
    # flask db migrate  # 将orm模型生成迁移脚本
    # flask db upgrade  # 将迁移脚本映射到数据库中

    # 初始化login_manager，登录要用的
    login_manager.init_app(app)
    # 如果用户还没有登录就要使用需要cookies的视图，此时要自动跳转到登录页面给用户
    login_manager.login_view = "web.login"
    # 在登录页面展示的提示文字
    login_manager.login_message = "请先登录或者注册"

    # 注册邮件插件
    mail.init_app(app)

    # db.create_all(app=app)  # 将所有模型映射到数据库， 不调用不会生成数据库的表的
    # 也可以这样, 通过源码get_app()  以后基本不会使用这个方式创建数据表
    # with app.app_context():
    #     db.create_all()
    return app


# 将蓝图注册到flask核心对象(app)
def register_blueprint(app):
    from app.web.book import web
    app.register_blueprint(web)